package com.xzx.spark.tuning.map

import com.xzx.spark.tuning.utils.InitUtil
import org.apache.spark.SparkConf
import org.apache.spark.sql.{SaveMode, SparkSession}

/**
 *
 * ${DESCRIPTION}
 *
 * @author xinzhixuan
 * @version 1.0
 * @date 2022-03-20 11:12 PM
 */
object MapSmallFileTuning {

  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setAppName("MapSmallFileTuning")
      // 原始小文件基本都是6M左右
      // 4M 合并为三个分区了，每个文件76M左右
      // 6M 合并为三个分区了，每个文件76M左右
      // 7M 合并为三个分区了，每个文件76M左右
      // 100M也是3个分区，每个文件76M左右
      // 120M也是3个分区，每个文件76M左右
      .set("spark.files.openCostInBytes", "4194304") //默认4m
      .set("spark.sql.files.maxPartitionBytes", "128MB") //默认128M
      .setMaster("local[1]") //TODO 要打包提交集群执行，注释掉
    val sparkSession: SparkSession = InitUtil.initSparkSession(sparkConf)

    // course_shopping_cart表是有38个小文件的，每个文件大小大概的是6.46M
    sparkSession.sql("select * from sparktuning.course_shopping_cart")
      .write
      .mode(SaveMode.Overwrite)
      .saveAsTable("sparktuning.test")


    // InitUtil.hangOn()
  }
}
